home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 June: Reference Library / Dev.CD Jun 96 RL / Dev.CD Jun 96 RL.toast / What's New? / Development Kits / Apple Game Sprockets DR1 / Examples / DroneZone / DZEvents.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-04-24  |  5.9 KB  |  305 lines  |  [TEXT/CWIE]

  1. /*
  2.  *    File:        DZEvents.c
  3.  *    Author:        Dan Venolia
  4.  *
  5.  *    Contents:    Handles the events.
  6.  *
  7.  *    Copyright © 1996 Apple Computer, Inc.
  8.  */
  9.  
  10. #include <assert.h>
  11.  
  12. #include <AppleEvents.h>
  13. #include <Events.h>
  14. #include <ToolUtils.h>
  15. #include <Types.h>
  16.  
  17. #include "DZDisplay.h"
  18. #include "DZEvents.h"
  19. #include "DZGame.h"
  20. #include "DZMain.h"
  21. #include "DZMenu.h"
  22.  
  23.  
  24. static void Events_MouseDown(
  25.     const EventRecord*        inEvent);
  26.  
  27. static void Events_KeyDown(
  28.     const EventRecord*        inEvent);
  29.  
  30. static void Events_AutoKey(
  31.     const EventRecord*        inEvent);
  32.  
  33. static void Events_Update(
  34.     const EventRecord*        inEvent);
  35.  
  36. static void Events_Activate(
  37.     const EventRecord*        inEvent);
  38.  
  39. static void Events_OS(
  40.     const EventRecord*        inEvent);
  41.  
  42. static void Events_HighLevel(
  43.     const EventRecord*        inEvent);
  44.  
  45.  
  46. /* =============================================================================
  47.  *        Events_Init (external)
  48.  *
  49.  *    Initializes the events stuff.
  50.  * ========================================================================== */
  51. void Events_Init(
  52.     void)
  53. {
  54.     FlushEvents(everyEvent, 0);
  55. }
  56.  
  57.  
  58. /* =============================================================================
  59.  *        Events_Exit (external)
  60.  *
  61.  *    Prepares for exit.
  62.  * ========================================================================== */
  63. void Events_Exit(
  64.     void)
  65. {
  66. }
  67.  
  68.  
  69. /* =============================================================================
  70.  *        Events_Process (external)
  71.  *
  72.  *    Processes any pending events.
  73.  * ========================================================================== */
  74. void Events_Process(
  75.     void)
  76. {
  77.     EventRecord                ev;
  78.     
  79.     while (GetNextEvent(everyEvent, &ev))
  80.     {
  81.         switch (ev.what)
  82.         {
  83.             case mouseDown:
  84.                 Events_MouseDown(&ev);
  85.             break;
  86.             
  87.             case keyDown:
  88.                 Events_KeyDown(&ev);
  89.             break;
  90.             
  91.             case autoKey:
  92.                 Events_AutoKey(&ev);
  93.             break;
  94.             
  95.             case updateEvt:
  96.                 Events_Update(&ev);
  97.             break;
  98.             
  99.             case activateEvt:
  100.                 Events_Activate(&ev);
  101.             break;
  102.             
  103.             case osEvt:
  104.                 Events_OS(&ev);
  105.             break;
  106.             
  107.             case kHighLevelEvent:
  108.                 Events_HighLevel(&ev);
  109.             break;
  110.             
  111.         }
  112.     }
  113.     
  114.     SystemTask();
  115. }
  116.  
  117.  
  118. /* =============================================================================
  119.  *        Events_MouseDown (internal)
  120.  *
  121.  *    Processes a mouse-down event.
  122.  * ========================================================================== */
  123. void Events_MouseDown(
  124.     const EventRecord*        inEvent)
  125. {
  126.     short                     part;
  127.     WindowPtr                wind;
  128.     long                    menu;
  129.     Rect                    limits;
  130.     long                    size;
  131.     
  132.     assert(inEvent != NULL);
  133.     
  134.     part = FindWindow(inEvent->where, &wind);
  135.     
  136.     switch (part)
  137.     {
  138.         case inMenuBar:
  139.             menu = MenuSelect(inEvent->where);
  140.             Menu_Select(HiWord(menu), LoWord(menu));
  141.         break;
  142.             
  143.         case inSysWindow:
  144.             SystemClick(inEvent, wind);
  145.         break;
  146.             
  147.         case inDrag:
  148.             DragWindow(wind, inEvent->where, &qd.screenBits.bounds);
  149.         break;
  150.             
  151.         case inGoAway:
  152.             Main_LastRoundup();
  153.         break;
  154.                 
  155.         case inContent:
  156.             // nothing yet...
  157.         break;
  158.             
  159.         case inGrow:
  160.             limits.top    = 64;
  161.             limits.left   = 64;
  162.             limits.bottom = 4096;
  163.             limits.right  = 4096;
  164.             
  165.             size = GrowWindow(wind, inEvent->where, &limits);
  166.             
  167.             if (size != 0)
  168.             {
  169.                 SetPort(wind);
  170.                 EraseRect(&wind->portRect);
  171.                 SizeWindow(wind, LoWord(size), HiWord(size), true);
  172.                 InvalRect(&wind->portRect);
  173.                 
  174.                 if (wind == Display_GetWindow())
  175.                 {
  176.                     Display_Resize();
  177.                 }
  178.             } 
  179.         break;
  180.     }
  181. }
  182.  
  183.  
  184. /* =============================================================================
  185.  *        Events_KeyDown (internal)
  186.  *
  187.  *    Processes a key-down event.
  188.  * ========================================================================== */
  189. void Events_KeyDown(
  190.     const EventRecord*        inEvent)
  191. {
  192.     unsigned long            ch;
  193.     unsigned long            cap;
  194.     long                    menu;
  195.     
  196.     assert(inEvent != NULL);
  197.     
  198.     ch = inEvent->message & charCodeMask;
  199.     cap = (inEvent->message & keyCodeMask) >> 8;
  200.     
  201.     if ((inEvent->modifiers & cmdKey) != 0)
  202.     {
  203.         menu = MenuKey(ch);
  204.         Menu_Select(HiWord(menu), LoWord(menu));
  205.     }
  206.     else
  207.     {
  208.         Game_KeyDown(ch, cap);
  209.     }
  210. }
  211.  
  212.  
  213. /* =============================================================================
  214.  *        Events_AutoKey (internal)
  215.  *
  216.  *    Processes an auto-key event.
  217.  * ========================================================================== */
  218. void Events_AutoKey(
  219.     const EventRecord*        inEvent)
  220. {
  221.     // Do nothing for now
  222. }
  223.  
  224.  
  225. /* =============================================================================
  226.  *        Events_Update (internal)
  227.  *
  228.  *    Processes an update event.
  229.  * ========================================================================== */
  230. void Events_Update(
  231.     const EventRecord*        inEvent)
  232. {
  233.     WindowPtr                wind;
  234.     
  235.     assert(inEvent != NULL);
  236.     
  237.     wind = (WindowPtr) inEvent->message;
  238.     
  239.     BeginUpdate(wind);
  240.     
  241.     if (wind == Display_GetWindow())
  242.     {
  243.         Display_DrawGrow();
  244.         Display_DrawImage();
  245.     }
  246.     
  247.     EndUpdate(wind);
  248. }
  249.  
  250.  
  251. /* =============================================================================
  252.  *        Events_Activate (internal)
  253.  *
  254.  *    Processes an activate event.
  255.  * ========================================================================== */
  256. void Events_Activate(
  257.     const EventRecord*        inEvent)
  258. {
  259.     WindowPtr                wind;
  260.     
  261.     assert(inEvent != NULL);
  262.     
  263.     wind = (WindowPtr) inEvent->message;
  264.     
  265.     if (wind == Display_GetWindow())
  266.     {
  267.         Display_Activate((inEvent->modifiers & activeFlag) != 0);
  268.     }
  269. }
  270.  
  271.  
  272. /* =============================================================================
  273.  *        Events_OS (internal)
  274.  *
  275.  *    Processes an OS event.
  276.  * ========================================================================== */
  277. void Events_OS(
  278.     const EventRecord*        inEvent)
  279. {
  280.     assert(inEvent != NULL);
  281.     
  282.     if ((inEvent->message >> 24) & 0xFF == suspendResumeMessage)
  283.     {
  284.         Display_Activate((inEvent->message & resumeFlag) != 0);
  285.     }
  286. }
  287.  
  288.  
  289. /* =============================================================================
  290.  *        Events_HighLevel (internal)
  291.  *
  292.  *    Processes a high-level event.
  293.  * ========================================================================== */
  294. void Events_HighLevel(
  295.     const EventRecord*        inEvent)
  296. {
  297.     assert(inEvent != NULL);
  298.     
  299.     AEProcessAppleEvent(inEvent);
  300. }
  301.  
  302.  
  303.  
  304.  
  305.